package com.itany.corejava.code06_数组;

import java.util.Arrays;

/**
 * @author 石小俊
 * @date 2023年04月13日 10:48
 */
public class Test07_值传递和引用传递 {

    public static void main(String[] args) {
        // 值传递
        // 在栈内存中开辟了一块空间
        // 空间名为i,值为1
        int i = 1;
        // 在栈内存中开辟了一块空间
        // 空间名为i2,值为i的值
        // 此时会将i的值传递给i2
        int i2 = i;

        // 由于i与i2各自有一块空间
        // 当修改i2的时候,是直接修改了i2的空间中的值
        // 对于i没有任何影响
        i2 = 2;
        System.out.println(i);
        System.out.println(i2);

        // 引用传递
        // 在堆中开辟了一串连续的空间,用于存放具体的数据
        // 在栈中开辟了一块空间,存放堆内存的首地址
        int[] arr = {1, 3, 5};
        // 在栈中开辟了一块空间,将arr栈中的值赋值给了arr2
        // 此时arr2在栈中存储的也是堆中数组的首地址
        // 此时arr与arr2指向了同一个堆内存区域
        int[] arr2 = arr;

        // 当修改了堆内存中某一个元素的值时,arr的值也随之改变了
        arr2[0] = 2;

        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(arr2));
    }

}
